﻿using System;
using System.Collections.Generic;
using NHibernate;

namespace ControleRepresentante.Logic.Models
{
    public class Representante : ModelBase
    {
        private readonly IList<AttributeHolder> m_AttributeHolders;
        private readonly IList<Attribute> m_Attributes;
        private readonly IList<User> m_Users;

        public Representante()
        {
            m_Users = new List<User>();
            m_Attributes = new List<Attribute>();
            m_AttributeHolders = new List<AttributeHolder>();
            Ativo = true;
            RepresentanteInfo = new RepresentanteInfo(this);
        }

        public virtual string Nome { get; set; }
        public virtual bool Ativo { get; set; }
        public virtual IEnumerable<User> Users { get { return m_Users; } }
        public virtual IEnumerable<AttributeHolder> AttributeHolders { get { return m_AttributeHolders; } }
        public virtual IEnumerable<Attribute> Attributes { get { return m_Attributes; } }
        public virtual RepresentanteInfo RepresentanteInfo { get; protected set; }
        public virtual bool UseJolitex { get; set; }
        public virtual bool UseTrivium { get; set; }
        public virtual int NumeroDeUsuarios { get { return m_Users.Count; } }
        public virtual int NumeroDePedidos { get; set; }
        public virtual int NumeroDeClientes { get; set; }
        public virtual int NumeroDeVendedores { get; set; }
        public virtual int NumeroDeFabricas { get; set; }
        public virtual int NumeroDeTransportadoras { get; set; }
        public virtual DateTime? LastPedido { get; set; }

        public virtual void RemoveUser(User user)
        {
            m_Users.Remove(user);
            user.Representante = null;
        }

        public virtual void AddUser(User user)
        {
            m_Users.Add(user);
            user.Representante = this;
        }
    }

    public class RepresentanteInfo : ModelBase
    {
        public RepresentanteInfo(Representante representante)
        {
            Representante = representante;
        }

        public RepresentanteInfo()
        {
        }

        public virtual string NomePedido { get; set; }
        public virtual string InfoPedido { get; set; }
        public virtual Attribute VendedorPedidoAttribute { get; set; }
        protected internal virtual Representante Representante { get; protected set; }

        public override Guid Id
        {
            get { return Representante.Id; }
            set { }
        }
    }
}
